<html><head><meta charset="utf-8"/><title>第一个Node程序</title></head><body><h1>第一个Node程序</h1><div class="x-wiki-content x-main-content">
 <p>
  在前面的所有章节中，我们编写的JavaScript代码都是在浏览器中运行的，因此，我们可以直接在浏览器中敲代码，然后直接运行。
 </p>
 <p>
  从本章开始，我们编写的JavaScript代码将
  <em>
   不能
  </em>
  在浏览器环境中执行了，而是在Node环境中执行，因此，JavaScript代码将直接在你的计算机上以命令行的方式运行，所以，我们要先选择一个文本编辑器来编写JavaScript代码，并且把它保存到本地硬盘的某个目录，才能够执行。
 </p>
 <p>
  那么问题来了：文本编辑器到底哪家强？
 </p>
 <p>
  首先，请注意，
  <span style="color:red">
   绝对不能用Word和写字板
  </span>
  。Word和写字板保存的不是纯文本文件。如果我们要用记事本来编写JavaScript代码，要务必注意，记事本以UTF-8格式保存文件时，会自作聪明地在文件开始的地方加上几个特殊字符（UTF-8 BOM），结果经常会导致程序运行出现莫名其妙的错误。
 </p>
 <p>
  所以，用记事本写代码时请注意，保存文件时使用ANSI编码，并且暂时不要输入中文。
 </p>
 <p>
  如果你的电脑上已经安装了
  <a href="http://www.sublimetext.com/">
   Sublime Text
  </a>
  ，或者
  <a href="http://notepad-plus-plus.org/">
   Notepad++
  </a>
  ，也可以用来编写JavaScript代码，注意用UTF-8格式保存。
 </p>
 <p>
  输入以下代码：
 </p>
 <pre><code>'use strict';

console.log('Hello, world.');
</code></pre>
 <p>
  第一行总是写上
  <code>
   'use strict';
  </code>
  是因为我们总是以严格模式运行JavaScript代码，避免各种潜在陷阱。
 </p>
 <p>
  然后，选择一个目录，例如
  <code>
   C:\Workspace
  </code>
  ，把文件保存为
  <code>
   hello.js
  </code>
  ，就可以打开命令行窗口，把当前目录切换到
  <code>
   hello.js
  </code>
  所在目录，然后输入以下命令运行这个程序了：
 </p>
 <pre><code>C:\Workspace&gt;node hello.js
Hello, world.
</code></pre>
 <p>
  也可以保存为别的名字，比如
  <code>
   first.js
  </code>
  ，但是必须要以
  <code>
   .js
  </code>
  结尾。此外，文件名只能是英文字母、数字和下划线的组合。
 </p>
 <p>
  如果当前目录下没有
  <code>
   hello.js
  </code>
  这个文件，运行
  <code>
   node hello.js
  </code>
  就会报错：
 </p>
 <pre><code>C:\Workspace&gt;node hello.js
module.js:338
    throw err;
          ^
Error: Cannot find module 'C:\Workspace\hello.js'
    at Function.Module._resolveFilename
    at Function.Module._load
    at Function.Module.runMain
    at startup
    at node.js
</code></pre>
 <p>
  报错的意思就是，没有找到
  <code>
   hello.js
  </code>
  这个文件，因为文件不存在。这个时候，就要检查一下当前目录下是否有这个文件了。
 </p>
 <h3>
  命令行模式和Node交互模式
 </h3>
 <p>
  请注意区分命令行模式和Node交互模式。
 </p>
 <p>
  看到类似
  <code>
   C:\&gt;
  </code>
  是在Windows提供的命令行模式：
 </p>
 <p>
  <img alt="run-node-hello" data-src="/files/attachments/1032714017334912/l" src="https://www.liaoxuefeng.com/files/attachments/1032714017334912/l"/>
 </p>
 <p>
  在命令行模式下，可以执行
  <code>
   node
  </code>
  进入Node交互式环境，也可以执行
  <code>
   node hello.js
  </code>
  运行一个
  <code>
   .js
  </code>
  文件。
 </p>
 <p>
  看到
  <code>
   &gt;
  </code>
  是在Node交互式环境下：
 </p>
 <p>
  <img alt="node-interactive-env" data-src="/files/attachments/1032714042830592/l" src="https://www.liaoxuefeng.com/files/attachments/1032714042830592/l"/>
 </p>
 <p>
  在Node交互式环境下，我们可以输入JavaScript代码并立刻执行。
 </p>
 <p>
  此外，在命令行模式运行
  <code>
   .js
  </code>
  文件和在Node交互式环境下直接运行JavaScript代码有所不同。Node交互式环境会把每一行JavaScript代码的结果自动打印出来，但是，直接运行JavaScript文件却不会。
 </p>
 <p>
  例如，在Node交互式环境下，输入：
 </p>
 <pre><code>&gt; 100 + 200 + 300;
600
</code></pre>
 <p>
  直接可以看到结果
  <code>
   600
  </code>
  。
 </p>
 <p>
  但是，写一个
  <code>
   calc.js
  </code>
  的文件，内容如下：
 </p>
 <pre><code>100 + 200 + 300;
</code></pre>
 <p>
  然后在命令行模式下执行：
 </p>
 <pre><code>C:\Workspace&gt;node calc.js
</code></pre>
 <p>
  发现什么输出都没有。
 </p>
 <p>
  这是正常的。想要输出结果，必须自己用
  <code>
   console.log()
  </code>
  打印出来。把
  <code>
   calc.js
  </code>
  改造一下：
 </p>
 <pre><code>console.log(100 + 200 + 300);
</code></pre>
 <p>
  再执行，就可以看到结果：
 </p>
 <pre><code>C:\Workspace&gt;node calc.js
600
</code></pre>
 <h3>
  使用严格模式
 </h3>
 <p>
  如果在JavaScript文件开头写上
  <code>
   'use strict';
  </code>
  ，那么Node在执行该JavaScript时将使用严格模式。但是，在服务器环境下，如果有很多JavaScript文件，每个文件都写上
  <code>
   'use strict';
  </code>
  很麻烦。我们可以给Nodejs传递一个参数，让Node直接为所有js文件开启严格模式：
 </p>
 <pre><code>node --use_strict calc.js
</code></pre>
 <p>
  后续代码，如无特殊说明，我们都会直接给Node传递
  <code>
   --use_strict
  </code>
  参数来开启严格模式。
 </p>
 <h3>
  小结
 </h3>
 <p>
  用文本编辑器写JavaScript程序，然后保存为后缀为
  <code>
   .js
  </code>
  的文件，就可以用node直接运行这个程序了。
 </p>
 <p>
  Node的交互模式和直接运行
  <code>
   .js
  </code>
  文件有什么区别呢？
 </p>
 <p>
  直接输入
  <code>
   node
  </code>
  进入交互模式，相当于启动了Node解释器，但是等待你一行一行地输入源代码，每输入一行就执行一行。
 </p>
 <p>
  直接运行
  <code>
   node hello.js
  </code>
  文件相当于启动了Node解释器，然后一次性把
  <code>
   hello.js
  </code>
  文件的源代码给执行了，你是没有机会以交互的方式输入源代码的。
 </p>
 <p>
  在编写JavaScript代码的时候，完全可以一边在文本编辑器里写代码，一边开一个Node交互式命令窗口，在写代码的过程中，把部分代码粘到命令行去验证，事半功倍！前提是得有个27'的超大显示器！
 </p>
 <h3>
  参考源码
 </h3>
 <p>
  <a href="https://github.com/michaelliao/learn-javascript/tree/master/samples/node/first">
   hello.js和calc.js
  </a>
 </p>
</div>
</body></html>